const fp = require('lodash/fp')

const cars = [{
    name: 'Ferrari FF',
    horsepower: 660,
    dollar_value: 700000,
    in_stock: true
}, {
    name: 'Spyker C12 Zagato',
    horsepower: 650,
    dollar_value: 648000,
    in_stock: false
}, {
    name: 'Jaguar XKR-S',
    horsepower: 550,
    dollar_value: 132000,
    in_stock: false
}, {
    name: 'Audi A8',
    horsepower: 525,
    dollar_value: 114200,
    in_stock: false
}, {
    name: 'Aston Martin one-77',
    horsepower: 750,
    dollar_value: 1850000,
    in_stock: true
}, {
    name: 'Pagani Huayra',
    horsepower: 700,
    dollar_value: 1300000,
    in_stock: false
}]

// 练习1：使用函数组合fp.flowRight()
// 获取最后一条数据的 in_stock的值  
let isLastInStock = fp.flowRight(fp.prop('in_stock'), fp.last);
let stock = isLastInStock(cars);
console.log(stock);

// 练习2：使用fp.flowRight, fp.prop, fp.first获取第一条数据的name的值
let firstName = fp.flowRight(fp.prop('name'), fp.first);

let name = firstName(cars)
console.log(name);

// 练习3：使用帮助函数_average重构averageDollerValue, 使用函数组合的方式实现

let _average = function (xs) {
    return fp.reduce(fp.add, 0, xs) / xs.length;
}

let averageDollerValue = fp.flowRight(_average, fp.map('dollar_value'))

let values = averageDollerValue(cars);
console.log(values);


// 练习4：写一个sanitizeNames()函数，返回下划线链接的小写字母字符串

let _underscore = fp.replace(/\W+/g, '_');

let sanitizeNames = fp.flowRight(fp.map(fp.flowRight(_underscore, fp.lowerCase)));
let lowerCaseName = sanitizeNames(['Hello World'])

console.log(lowerCaseName);

